/***************************************************************************
 创建者: 华磊
 开始时间: 2020.8.14
 copyright: (C) 华友高科
 修改说明: (每次有修改就添加一条，带有 修改人，修改时间，修改描述)
 example (1) hualei 2020.5.8 类的具体实现代码编写

 ***************************************************************************/
#include "motionmessage.h"

#include <qobject.h>
#include <qdebug.h>
#include "AxisDefines.h"
#include "messagelog.h"
#include "trajectoryserver.h"

MotionMessage::MotionMessage(TrajectoryServer *trajServerIn)
{
    trajServer=trajServerIn;
}


int MotionMessage::addMsg(Message message)
{
    if(ENUM_MSG_ERROR==message.MessageLevel)
    {
//        trajServer->quickStop(); 不明白为什么会出现segment core dump
    }

//    switch(messageCode)
//    {

//        case 2001://ENUM_MSG_ERROR
//        {
//           string str1;
//           str1 = QObject::tr("机器人(ID:").toStdString() +
//                   QString::number(_robotId).toStdString() +
//                   QObject::tr(")第").toStdString() +
//                   QString::number(parameter1).toStdString() +
//                   QObject::tr("轴过程跟随误差超出设定上限").toStdString();
//           infomationStr = str1;
//           break;
//        }
//        case 2002://ENUM_MSG_ERROR 初始化
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")机器人类型不支持！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2003://REMIND
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")运行中，控制模式修改无效").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2004://ENUM_MSG_ERROR
//        {
//           string str1;
//           str1 = QObject::tr("机器人(ID:").toStdString() +
//                   QString::number(_robotId).toStdString() +
//                   QObject::tr(")当前坐标系与运行程序第").toStdString() +
//                   QString::number(parameter1).toStdString() +
//                   QObject::tr("行的笛卡尔点位坐标系编号不一致！").toStdString();
//           infomationStr = str1;
//           break;
//        }
//        case 2005://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")寸动不支持世界、用户、工具和关节以外坐标类型！").toStdString() +
//            infomationStr = str1;
//            break;
//        }
//        case 2006://ENUM_MSG_ERROR 初始化
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")读轴配置文件失败！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2007://ENUM_MSG_ERROR
//        {
//            string str1, str2;
//            switch(parameter2)
//            {
//            case ENUM_USER:
//            {
//                str2 = QObject::tr("用户").toStdString();
//                break;
//            }
//            case ENUM_TOOL:
//            {
//                str2 = QObject::tr("工具").toStdString();
//                break;
//            }
//            case ENUM_WORLD:
//            {
//                str2 = QObject::tr("世界").toStdString();
//                break;
//            }
//            default:
//            {
//                str2 = QObject::tr("关节").toStdString();
//                break;
//            }
//            }
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")").toStdString() +
//                    str2 + QObject::tr(")寸动轴号").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("超出范围！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2008://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")不支持程运、移动到点和寸动以外运动类型！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2009://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")EtherCAT读取关节数量与配置文件关节数量不一致！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2010://ENUM_MSG_ERROR
//        {
//            string str1, str2;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")工具坐标号修改无效，").toStdString();
//            str2 = QObject::tr("修改坐标号").toStdString() +
//                    QString::number(parameter2).toStdString() +
//                    QObject::tr("超过范围").toStdString();
//            infomationStr = str1 + str2;
//            break;
//        }
//        case 2011://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")设定工具坐标").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("超过范围！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2012://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")使用六点法设定第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("个工具坐标失败！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2013://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")使用三点法设定第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("个工具坐标失败！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2019://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")不支持该工具坐标系设定方法！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2020://ENUM_MSG_ERROR
//        {
//            string str1, str2;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")用户坐标号修改无效，").toStdString();
//            str2 = QObject::tr("修改坐标号").toStdString() +
//                    QString::number(parameter2).toStdString() +
//                    QObject::tr("超过范围").toStdString();
//            infomationStr = str1 + str2;
//            break;
//        }
//        case 2021://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")设定用户坐标").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("超过范围！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2022://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")使用三点法设定第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("个用户坐标失败！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2023://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")使用四点法设定第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("个用户坐标失败！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2029://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")不支持该用户坐标系设定方法！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2030://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("个码垛初始化失败！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2031://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("个码垛未初始化！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2032://ENUM_MSG_ERROR
//        {
//           string str1;
//           str1 = QObject::tr("机器人(ID:").toStdString() +
//                   QString::number(_robotId).toStdString() +
//                   QObject::tr(")当前运行程序第").toStdString() +
//                   QString::number(parameter1).toStdString() +
//                   QObject::tr("行的码垛解析错误！").toStdString();
//           infomationStr = str1;
//           break;
//        }
//        case 2033://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("个码垛示教信息错误，请重新示教！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2034://ENUM_MSG_REMIND
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")码垛的行列层信息有缺失！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2035://ENUM_MSG_REMIND
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")码垛的行列层超出范围！").toStdString();
//            infomationStr = str1;
//            break;
//        }
////        case 2031://ENUM_MSG_ERROR
////        {
////            string str1;
////            str1 = QObject::tr("机器人(ID:").toStdString() +
////                    QString::number(_robotId).toStdString() +
////                    QObject::tr(")第").toStdString() +
////                    QString::number(parameter1).toStdString() +
////                    QObject::tr("个码垛未初始化！").toStdString();
////            infomationStr = str1;
////            break;
////        }
//        case 2040://ENUM_MSG_ERROR 初始化
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")内部轴数量为0！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2041://ENUM_MSG_REMIND
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")读取T1限制值错误，使用默认值10%").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2042://ENUM_MSG_REMIND
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")读取坐标系数量错误，使用默认值10").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2050://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("行程序出错，不支持关节、直线和圆弧以外的程序指令类型！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2051://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")读取第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("行圆弧指令出错").toStdString();
//            if(ENUM_COMMAND_CIRCLE!=parameter2)
//            {
//                str1 = str1 + QObject::tr("，第二段指令不是圆弧").toStdString();
//            }
//            if(0!=parameter3)
//            {
//                str1 = str1 + QObject::tr("，不是FINE或者CNT不等于0！").toStdString();
//            }
//            else
//            {
//                str1 = str1 + QObject::tr("！").toStdString();
//            }
//            infomationStr = str1;
//            break;
//        }
//        case 2052://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("行指令出错，平滑段指令结束不是FINE！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2053://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")不支持移动到点运动类型！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2054://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("行程序指令速度单位出错，不支持该单位！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2055://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")的笛卡尔轨迹起始点与程序指令点位的多解选项不匹配！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2056://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")运行程序第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("行加速度值异常！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2057://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")运行程序第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("行速度值异常！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2060://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")运动学位置逆解失败！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2061://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")运动学速度逆解失败！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//    case 2062://ENUM_MSG_ERROR
//    {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")顶点奇异点逆解失败！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2063://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")J3奇异点逆解失败！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2064://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")J5奇异点逆解失败！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2070://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")不支持解耦类型！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2071://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")第").toStdString() +
//                    QString::number(parameter2).toStdString() +
//                    QObject::tr("个关节位置超过").toStdString();
//            if(parameter1>0)
//            {
//                str1 = str1 + QObject::tr("正限位！").toStdString();
//            }
//            else
//            {
//                str1 = str1 + QObject::tr("负限位！").toStdString();
//            }
//            infomationStr = str1;
//            break;
//        }
//        case 2072://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("个关节速度超过限制！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2073://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QString(",轴:%1").arg(parameter1).toStdString() +
//                    QObject::tr(")跟随误差长时间不能达到设定值！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2074://ENUM_MSG_REMIND
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("个码垛完成，结束码垛工作！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2075://ENUM_MSG_REMIND
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")点数据为空！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2076://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("个关节Increament速度超过限制！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        case 2077://ENUM_MSG_ERROR
//        {
//            string str1;
//            str1 = QObject::tr("机器人(ID:").toStdString() +
//                    QString::number(_robotId).toStdString() +
//                    QObject::tr(")第").toStdString() +
//                    QString::number(parameter1).toStdString() +
//                    QObject::tr("个关节Increament加速度超过限制！").toStdString();
//            infomationStr = str1;
//            break;
//        }
//        default:
//        {
//            qDebug()<<"McControllerInterpreter::addMsg====not match error code";
//            break;
//        }
//    }

#ifndef MOTION_SERVER_UNIT_TEST
    MessageLog::getInstance()->addMessage(message);
#endif
    return 1;
}



int MotionMessage::clearMsg(const Message message)
{

    qDebug()<<"McControllerInterpreter::clearMsg====message id"<<message.messageCode;


    switch(message.messageCode)
    {
        case 2002:
        {
            return -1;
        }
        case 2006:
        {
            return -1;
        }
        case 2040:
        {
            return -1;
        }
        case 6000:
        {
            return 0;
        }
        case 6001:
        {
            return 0;
        }
        case 2073:
        {
            //targetCount= 0;
            break;
        }
        default:
        {
            break;
        }
    }
    if(ENUM_MSG_REMIND!=message.MessageLevel)//提示消息不重置
    {
        //resetMove();
    }
    return 0;
}

int MotionMessage::clearAllMsg()
{
    if(ENUM_TRAJECTORY_STOPPED!=trajServer->getStatus())
    {
        return 0;
    }
    trajServer->resetAll();
    return 1;
}
